package com.cyt.work.association.service.impl;

import com.cyt.base.model.dto.ReturnResult;
import com.cyt.base.util.BaseConstant;
import com.cyt.base.util.DictCode;
import com.cyt.base.util.ErrorCode;
import com.cyt.sys.model.po.SysUser;
import com.cyt.sys.service.impl.BaseServiceImpl;
import com.cyt.work.association.dao.WxAssociationNewDetailDao;
import com.cyt.work.association.model.po.WxAssociationNewDetail;
import com.cyt.work.association.model.vo.WxAssociationNewDetailVo;
import com.cyt.work.association.model.vo.WxAssociationNewDetailVoC;
import com.cyt.work.association.service.WxAssociationNewDetailService;
import com.cyt.wx.model.po.WxEducationUser;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 招新关联社团表-招新关联社团表Service层实现类
 *
 * @author han jun
 * @date 2019-9-3 16:42:35
 */
@Service("wxAssociationNewDetailService")
public class WxAssociationNewDetailServiceImpl extends BaseServiceImpl<WxAssociationNewDetail> implements WxAssociationNewDetailService {

    @Resource
    private WxAssociationNewDetailDao wxAssociationNewDetailDao;

    @Autowired
    public void setBaseDao(WxAssociationNewDetailDao wxAssociationNewDetailDao) {
        this.baseDao = wxAssociationNewDetailDao;
    }

    /**
     * 分页查询
     *
     * @param wxAssociationNewDetailVo 接受参数对象
     * @param pageNum 分页数
     * @param pageSize 每页显示条数
     * @return ReturnResult
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    public ReturnResult findPage(WxAssociationNewDetailVo wxAssociationNewDetailVo, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        PageHelper.orderBy(" create_time desc");
        Example example = new Example(WxAssociationNewDetail.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("removeTag", DictCode.BASE_REMOVE_TAG_NORMAL);
        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getApplyId())) {
            criteria.andEqualTo("applyId", wxAssociationNewDetailVo.getApplyId());
        }
        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getAssociationNewId())) {
            criteria.andEqualTo("associationNewId", wxAssociationNewDetailVo.getAssociationNewId());
        }
        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getApplyId())) {
            criteria.andEqualTo("applyId", wxAssociationNewDetailVo.getApplyId());
        }

        List<WxAssociationNewDetail> list = wxAssociationNewDetailDao.selectByExample(example);
        PageInfo<WxAssociationNewDetail> page = new PageInfo<>(list);
        return new ReturnResult(page.getList(), page.getTotal(), page.isHasNextPage());
    }

    /**
     * 分页查询
     *
     * @param wxAssociationNewDetailVo 接受参数对象
     * @param pageNum 分页数
     * @param pageSize 每页显示条数
     * @return ReturnResult
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    public ReturnResult findVoPage(WxAssociationNewDetailVo wxAssociationNewDetailVo, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
////        PageHelper.orderBy(" create_time desc");
//        Example example = new Example(WxAssociationNewDetail.class);
//        Example.Criteria criteria = example.createCriteria();
//        criteria.andEqualTo("removeTag", DictCode.BASE_REMOVE_TAG_NORMAL);
//        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getTitle())) {
//            criteria.andEqualTo("title", wxAssociationNewDetailVo.getTitle());
//        }
//
//        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getApplyId())) {
//            criteria.andEqualTo("applyId", wxAssociationNewDetailVo.getApplyId());
//        }
//        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getAssociationNewId())) {
//            criteria.andEqualTo("associationNewId", wxAssociationNewDetailVo.getAssociationNewId());
//        }
//        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getApplyId())) {
//            criteria.andEqualTo("applyId", wxAssociationNewDetailVo.getApplyId());
//        }

        List<WxAssociationNewDetailVo> list = wxAssociationNewDetailDao.selectVoList(wxAssociationNewDetailVo);
        PageInfo<WxAssociationNewDetailVo> page = new PageInfo<>(list);
        return new ReturnResult(page.getList(), page.getTotal(), page.isHasNextPage());
    }

    /**
     * list查询
     *
     * @param wxAssociationNewDetailVo 接受参数对象
     * @return List<WxAssociationNewDetail>
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    public List<WxAssociationNewDetail> findList(WxAssociationNewDetailVo wxAssociationNewDetailVo) {
        Example example = new Example(WxAssociationNewDetail.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("removeTag", DictCode.BASE_REMOVE_TAG_NORMAL);
        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getAssociationNewId())) {
            criteria.andEqualTo("associationNewId", wxAssociationNewDetailVo.getAssociationNewId());
        }
        if (org.apache.commons.lang3.StringUtils.isNotEmpty(wxAssociationNewDetailVo.getApplyId())) {
            criteria.andEqualTo("applyId", wxAssociationNewDetailVo.getApplyId());
        }
        return wxAssociationNewDetailDao.selectByExample(example);
    }

    /**
     * list查询
     *
     * @param wxAssociationNewDetailVo 接受参数对象
     * @return List<WxAssociationNewDetail>
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    public List<WxAssociationNewDetailVo> findVoList(WxAssociationNewDetailVo wxAssociationNewDetailVo) {
        return wxAssociationNewDetailDao.selectVoList(wxAssociationNewDetailVo);
    }


    /**
     * list查询(新)
     *
     * @param wxEducationUser 接受参数对象
     * @return List<WxAssociationNewDetail>
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    public List<WxAssociationNewDetailVo> findVoListNew(WxEducationUser wxEducationUser) {

        return wxAssociationNewDetailDao.selectVoListNew(wxEducationUser);
    }

    @Override
    public List<WxAssociationNewDetailVo> findVoListTeaNew(WxAssociationNewDetailVo wxAssociationNewDetailVo) {
        return wxAssociationNewDetailDao.selectVoYearListNew(wxAssociationNewDetailVo);
    }

    /**
     * list查询有报名记录的社团
     *
     * @param wxEducationUser 接受参数对象
     * @return List<WxAssociationNewDetail>
     * @author ding xu
     * @date 2019-9-21
     */
    @Override
    public List<WxAssociationNewDetailVo> findVoListMy(WxEducationUser wxEducationUser) {
        return wxAssociationNewDetailDao.selectVoListMy(wxEducationUser);
    }

    /**
     * 单个对象查询
     *
     * @param wxAssociationNewDetailVo 接受参数对象
     * @return WxAssociationNewDetail
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    public WxAssociationNewDetail findOne(WxAssociationNewDetailVo wxAssociationNewDetailVo) {
        WxAssociationNewDetail wxAssociationNewDetail = new WxAssociationNewDetail();
        if (StringUtils.isBlank(wxAssociationNewDetailVo.getId())) {
            wxAssociationNewDetail.setId(wxAssociationNewDetailVo.getId());
        }
        return wxAssociationNewDetailDao.selectOne(wxAssociationNewDetail);
    }

    /**
     * 单个对象查询
     *
     * @param wxAssociationNewDetailVo 接受参数对象
     * @return WxAssociationNewDetail
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    public WxAssociationNewDetailVo findVoOne(WxAssociationNewDetailVo wxAssociationNewDetailVo) {
        return wxAssociationNewDetailDao.selectVoOne(wxAssociationNewDetailVo);
    }

    /**
     * 添加或更新
     *
     * @param wxAssociationNewDetailVo 参数接受对象
     * @param sysUser      当前用户
     * @return ReturnResult
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public ReturnResult addOrUpdate(WxAssociationNewDetailVo wxAssociationNewDetailVo, SysUser sysUser) {
        if (StringUtils.isBlank(wxAssociationNewDetailVo.getId())) {
            WxAssociationNewDetail wxAssociationNewDetail = new WxAssociationNewDetail(sysUser);
            wxAssociationNewDetail.setApplyId(wxAssociationNewDetailVo.getApplyId());
            wxAssociationNewDetail.setAssociationId(wxAssociationNewDetailVo.getAssociationId());
            wxAssociationNewDetail.setAssociationNewId(wxAssociationNewDetailVo.getAssociationNewId());
            wxAssociationNewDetail.setTotalNumber(wxAssociationNewDetailVo.getTotalNumber());
            wxAssociationNewDetail.setStuNumber(wxAssociationNewDetailVo.getStuNumber());
            wxAssociationNewDetail.setStatus(wxAssociationNewDetailVo.getStatus());
            wxAssociationNewDetailDao.insert(wxAssociationNewDetail);
            return new ReturnResult(BaseConstant.DATABASE_SUCCEED_INSERT);
        } else {
            WxAssociationNewDetail wxAssociationNewDetail = wxAssociationNewDetailDao.selectByPrimaryKey(wxAssociationNewDetailVo.getId());
            wxAssociationNewDetail.setApplyId(wxAssociationNewDetailVo.getApplyId());
            wxAssociationNewDetail.setAssociationId(wxAssociationNewDetailVo.getAssociationId());
            wxAssociationNewDetail.setAssociationNewId(wxAssociationNewDetailVo.getAssociationNewId());
            wxAssociationNewDetail.setTotalNumber(wxAssociationNewDetailVo.getTotalNumber());
            wxAssociationNewDetail.setStuNumber(wxAssociationNewDetailVo.getStuNumber());
            wxAssociationNewDetail.setStatus(wxAssociationNewDetailVo.getStatus());
            wxAssociationNewDetail.setUpdateTime(new Date());
            wxAssociationNewDetail.setUpdateUser(sysUser.getId());
            wxAssociationNewDetailDao.updateByPrimaryKey(wxAssociationNewDetail);
            return new ReturnResult(BaseConstant.DATABASE_SUCCEED_UPDATE);
        }
    }

    /**
     * 根据条件逻辑删除
     *
     * @param wxAssociationNewDetailVo 参数接受对象
     * @param sysUser 当前用户
     * @return ReturnResult
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public ReturnResult remove(WxAssociationNewDetailVo wxAssociationNewDetailVo, SysUser sysUser) {
        //修改字段
        WxAssociationNewDetail wxAssociationNewDetail = new WxAssociationNewDetail();
        wxAssociationNewDetail.setRemoveTag(DictCode.BASE_REMOVE_TAG_DELETE);
        wxAssociationNewDetail.setUpdateUser(sysUser.getId());
        wxAssociationNewDetail.setUpdateTime(new Date());
        //筛选条件
        Example example = new Example(WxAssociationNewDetail.class);
        Example.Criteria criteria = example.createCriteria();
        if (StringUtils.isNotBlank(wxAssociationNewDetailVo.getId())) {
            criteria.andIn("id", Arrays.asList(wxAssociationNewDetailVo.getId().split(",")));
        }

        criteria.andEqualTo("removeTag", DictCode.BASE_REMOVE_TAG_NORMAL);
        wxAssociationNewDetailDao.updateByExampleSelective(wxAssociationNewDetail, example);
        return new ReturnResult(ErrorCode.CODE_0, BaseConstant.DATABASE_SUCCEED_DEL);
    }

    /**
     * 根据条件物理删除
     *
     * @param wxAssociationNewDetailVo 参数接受对象
     * @param sysUser      当前用户
     * @return ReturnResult
     * @author han jun
     * @date 2019-9-3 16:42:35
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public ReturnResult delete(WxAssociationNewDetailVo wxAssociationNewDetailVo, SysUser sysUser) {
        //筛选条件
        Example example = new Example(WxAssociationNewDetail.class);
        Example.Criteria criteria = example.createCriteria();
        if (StringUtils.isNotBlank(wxAssociationNewDetailVo.getId())) {
            criteria.andIn("id", Arrays.asList(wxAssociationNewDetailVo.getId().split(",")));
        }
        wxAssociationNewDetailDao.deleteByExample(example);
        return new ReturnResult(ErrorCode.CODE_0, BaseConstant.DATABASE_SUCCEED_DEL);
    }

    @Override
    public List<WxAssociationNewDetailVoC> findDetailVoList(WxAssociationNewDetailVo wxAssociationNewDetailVo) {
        return wxAssociationNewDetailDao.findDetailVoList(wxAssociationNewDetailVo);
    }

    @Override
    public ReturnResult pageLeft(String eductionUserId, int pageSize, int pageNum) {
        PageHelper.startPage(pageNum, pageSize);
        List<WxAssociationNewDetailVoC> list = wxAssociationNewDetailDao.selectDetailList(eductionUserId);
        PageInfo<WxAssociationNewDetailVoC> page = new PageInfo<>(list);
        return new ReturnResult(page.getList(), page.getTotal(), page.isHasNextPage());
    }

    @Override
    public ReturnResult findDetailVoListByTeacher(String userNumber, int pageSize, int pageNum) {
        PageHelper.startPage(pageNum, pageSize);
        List<WxAssociationNewDetailVoC> list = wxAssociationNewDetailDao.selectDetailListByTeacher(userNumber);
        PageInfo<WxAssociationNewDetailVoC> page = new PageInfo<>(list);
        return new ReturnResult(page.getList(), page.getTotal(), page.isHasNextPage());
    }
}